ScrollableMixin
ScrollableMixin lets your scrollable React Native components conform to a standard interface, making it easier to compose components. This lets you compose different types of ScrollView-like components while preserving the ScrollView
API, including methods like scrollTo
.
See react-native-scrollable-decorator for the decorator version of this mixin.
Installation
npm install react-native-scrollable-mixin
Usage
Add ScrollableMixin to your scrollable React components and implement getScrollResponder()
, which must return the underlying scrollable component's scroll responder.
With JavaScript classes
Use Object.assign
to copy ScrollableMixin's functions to your class's prototype as instance methods:
class InfiniteScrollView extends React.Component {
static propTypes = {
...ScrollView.propTypes,
renderScrollComponent: PropTypes.func.isRequired
};
getScrollResponder() {
return this._scrollView.getScrollResponder();
}
setNativeProps(props) {
this._scrollView.setNativeProps(props);
}
render() {
let { renderScrollComponent, ...props } = this.props;
return React.cloneElement(renderScrollComponent(props), {
ref: component => { this._scrollView = component; },
});
}
}
Object.assign(InfiniteScrollView.prototype, ScrollableMixin);
With React.createClass
let ScrollableMixin = require('react-native-scrollable-mixin');
let InfiniteScrollView = React.createClass({
mixins: [ScrollableMixin],
propTypes: {
...ScrollView.propTypes,
renderScrollComponent: PropTypes.func.isRequired,
},
getScrollResponder() {
return this._scrollView.getScrollResponder();
},
setNativeProps(props) {
this._scrollView.setNativeProps(props);
},
render() {
var {
renderScrollComponent,
...props
} = this.props;
return React.cloneElement(renderScrollComponent(props), {
ref: component => { this._scrollView = component; },
});
},
});
Features
By mixing in ScrollableMixin, your custom component gets the ScrollView
API. For example:
class App extends React.Component {
render() {
return (
<ListView
ref={component => this._scrollView = component}
renderScrollView={props => <InfiniteScrollView {...props} />}
dataSource={...}
renderRow={...}
/>
);
}
_scrollToTop() {
this._scrollView.scrollTo(0, 0);
}
}